"""
功能描述 ：
编写人 ：
编写日期 ：
实现逻辑 ：
    1- ......
        1.1- ......
    2- ......
        2.1- ......
"""
#递归：3以内数字累加和

# def sum_numbers(num):
#     if num == 1:
#         return 1
#     return num + sum_numbers(num-1)
#
# sum_result = sum_numbers(3)
# print(sum_result)
#
# #lambda表达式
# #快1速入门
# def fn1():
#     return 200
#
# print(fn1)
# print(fn1())
# #lambda表达式
# fn2 = lambda :200
# print(fn2)
# print(fn2())
# #实例：计算A+B
#
# def add(a,b):
#     return a+b
#
# result = add(1,2)
# print(result)
# #lmabda实现
# fn1 = lambda a,b :a+b
# print(fn1(1,2))
#lmabda参数形式
#无参数
fn1 = lambda :100
print(fn1())

#一个参数
fn1 = lambda a:a
print(fn1('hello word'))

# #默认参数
# fn1 = lambda a,b,c = 100:a+b+c
# print(fn1(10,20))
#
# #可变参数：*args
# fn1 = lambda *args:args
# print(fn1(10,20,30))
#
# #可变参数：**kargs
# fn1 = lambda **kwargs:kwargs
# print(fn1(name = 'python',age = 20))
# # 带判断的lambda
# fn1 = lambda a,b,c:a if a>b else b
# print(fn1(1000,5000))
#列表数据按字典key的值排序
students = [{'name': 'TOM', 'age': 20},{'name': 'ROSE', 'age': 19},{'name': 'Jack', 'age': 22}]

#按name值升序排列
students.sort(key = lambda x:x ['name'])
print(students)
#按name值降序排列
students.sort(key = lambda x : x['name'],reverse=True)
print(students)
#按age值升序排列
students.sort(key=lambda x : x['age'])
print(students)

#高阶函数
#abs绝对值函数
abs(-10)
#round()函数四舍五入
round(1.2) #
round(1.9)
#任意两个数字, 按照指定要求整理数字后在进行求和计算
def add_num(a,b):
    return abs(a) + abs(b)
result = add_num(-1,2)
print(result)

def sun_num(a,b,f):
    return f(a) + f(b)

result = sun_num(-1,2,abs)
print(result)

#内置高阶函数
#map(func, lst)，将传入的函数变量func作用到lst变量的每个元素中，并将结果组成新的列表(Python2)/迭代器(Python3)返回
list1 = [1,2,3,4,5]
def func(x):
    return x ** 2
result =map(func,list)
print(result)
print(list(result))
#reduce(func，Ist)，其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。
import functools
list1 = [1,2,3,4,5]
def func (a,b):
    return a + b

result = functools.reduce(func,list1)
print(result)
#filter(func, Ist)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表,可以使用list()来转换。
list1 = [1,2,3,4,5,6,7,8,9,10]

def fun(X):
    return x %2 ==0

result = filter(func , list1)

print(result)
print(list(result))